//============================================================================
// Name        : Main.cpp
// Author      : Pedro Sanches Junior & Thiago Augusto Lopes Genez
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
#include "logica/Mepa.h"
using namespace std;

void error();
void help();

int main(int argc, char **argv) {

	int sizeProgram = 0;
	int sizeRegistradorD = 0;
	int sizeMemory = 0;

	char *fileMep;

	if (argc < 2 && argc != 4) {
		error();
	}

	/* Tratamento dos argumentos do programa */
	for (int i = 1; i < argc; i++) {

		/* verifica a presenca de '-', indicando um parametro */
		if (argv[i][0] == '-') {
			/* verifica  letra que segue o '-' */
			switch (argv[i][1]) {
			case 'D':
				/* ignora o espaco */
				i++;
				if ((!(i < argc - 1)) || (!atoi(argv[i]))) {
					error();
				}
				sizeRegistradorD = atoi(argv[i]);
				break;

			case 'P':
				/* ignora o espaco */

				i++;
				if ((!(i < argc - 1)) || (!atoi(argv[i]))) {
					error();
				}
				sizeProgram = atoi(argv[i]);
				break;

			case 'M':
				/* ignora o espaco */
				i++;
				if ((!(i < argc - 1)) || (!atoi(argv[i]))) {
					error();
				}
				sizeMemory = atoi(argv[i]);
				break;

			case '?':
				help();
				break;

			default:
				error();

			}

		} else {
			/* se nao tiver '-' na frente eh o nome do pontoMep */
			fileMep = argv[i];
		}
	}

	Mepa mepa;
	mepa.prepararMepa(fileMep, "saida.txt", "debugFile.txt", sizeProgram,
			sizeRegistradorD, sizeMemory);
	mepa.runMepa();
	return 0;
}

void error() {
	std::cout << std::endl << std::endl
			<< " -----------------------------------------------------"
			<< std::endl;
	std::cout << "\tSintaxe incorreta, utilize \"-?\" para ajuda." << std::endl;
	std::cout << " -----------------------------------------------------"
			<< std::endl << std::endl;
	exit(0);
}

void help() {
	std::cout << std::endl << std::endl
			<< " -----------------------------------------------------"
			<< std::endl;
	std::cout << " Parametros:                                          "
			<< std::endl;
	std::cout << "  -D n : tamanho n da memoria do registrador de base  "
			<< std::endl;
	std::cout << "  -M n : tamanho n da memoria de dados                "
			<< std::endl;
	std::cout << "  -P n : tamanho n da memoria de programa             "
			<< std::endl;
	std::cout << "  arquivo.mep: arquivo \"executavel\", contendo as ";
	std::cout << "instrucoes MEPA                                  "
			<< std::endl;
	std::cout << " -----------------------------------------------------"
			<< std::endl << std::endl;
	exit(0);
}

